# LuckPay Web Manage System
#
# Copyright (c) 2016 Lucky Byte, Inc.
#
get_permission = ->
    permissions = []
    $('table#permission tbody tr').not('#header').each ->
        item =
            href: $(this).data('href'),
            title: $(this).data('label'),
            header: $(this).data('header'),
            permission: {}
        if $(this).find('.checkbox#access').checkbox('is checked')
            permissions.push item
            item.permission.access = true
            for id in ['new', 'edit', 'delete', 'disable', 'check',
                'import', 'export', 'batch', 'recharge']
                if $(this).find('.checkbox#' + id).checkbox('is checked')
                    item.permission[id] = true
    return JSON.stringify permissions


$ ->
    form = $('form.main')
    form.form
        inline : true,
        fields :
            name : 'empty'

    # 提交前触发
    form.submit (evt) ->
        if not $(this).form('is valid')
            evt.preventDefault()
            return false
        # 组织权限 JSON 字符串上传
        if not form.find('.checkbox#root').checkbox('is checked')
            form.find('input[name=permission]').val get_permission()
        else
            form.find('input[name=permission]').val "[]"

    # 显示/隐藏 权限配置表格
    if form.find('.toggle#root').checkbox('is checked')
        form.find('table#permission').hide()
    else
        form.find('table#permission').show()

    # 当点击 root 选择框时，显示/隐藏 权限配置表格
    form.find('.toggle#root').checkbox
        onChecked: ->
            $('table#permission').hide()
        onUnchecked: ->
            $('table#permission').show()

    # 初始化权限配置表格为禁用状态
    trs = form.find('table#permission').find('tr').not('#header').each ->
        $(this).find('td').not(':first').addClass('disabled')
            .find('*').addClass('disabled')

    # 点击权限表格前面的选择框时，禁止/允许当前行的权限配置
    form.find('table#permission tbody .checkbox#access').each ->
        $(this).checkbox
            onChecked: ->
                $(this).parents('tr').find('td').not(':first')
                    .removeClass('disabled').find('*').removeClass('disabled')
            onUnchecked: ->
                $(this).parents('tr').find('td').not(':first')
                    .addClass('disabled').find('*').addClass('disabled')

    # 恢复权限界面
    permission = form.form 'get value', 'permission'
    if permission
        permission = JSON.parse permission
        for item in permission
            if not item.permission.access
                continue
            tr = $("table#permission tbody tr[data-href='#{item.href}']")
            tr.find('td').removeClass('disabled').find('*').removeClass('disabled')
            tr.find('td .checkbox#access').checkbox('set checked')
            for k in ['new', 'edit', 'delete', 'disable', 'check',
                'import', 'export', 'batch', 'recharge']
                if item.permission[k]
                    tr.find("td .checkbox##{k}").checkbox('set checked')

    # 全选按钮点击
    form.find('table#permission tbody .icon#select_all').click ->
        $(this).parents('td').siblings().find('.checkbox').checkbox('set checked')
    # 不选按钮点击
    form.find('table#permission tbody .icon#unselect_all').click ->
        $(this).parents('td').siblings().find('.checkbox').not('#access')
            .checkbox('set unchecked')

    # 批量勾选访问权限
    form.find('i#all_access').click ->
        if $(this).data('has_clicked')
            tr = $(this).parents('tr')
            while true
                tr = $(tr).next()
                box = $(tr).find('.checkbox:first')
                if box.length == 0
                    break
                $(box).checkbox('uncheck')
            $(this).data('has_clicked', false)
        else
            tr = $(this).parents('tr')
            while true
                tr = $(tr).next()
                box = $(tr).find('.checkbox:first')
                if box.length == 0
                    break
                $(box).checkbox('check')
            $(this).data('has_clicked', true)

    # 垂直勾选
    form.find('a#all_vertical').click (evt) ->
        evt.preventDefault()
        if $(this).data('has_clicked')
            $(this).data('has_clicked', false)
            tr = $(this).parents('tr')
            while true
                tr = $(tr).next()
                box = $(tr).find(".checkbox:eq(#{$(this).data('eq')})")
                if box.length == 0
                    break
                if not $(box).hasClass('disabled')
                    $(box).checkbox('uncheck')
        else
            $(this).data('has_clicked', true)
            tr = $(this).parents('tr')
            while true
                tr = $(tr).next()
                box = $(tr).find(".checkbox:eq(#{$(this).data('eq')})")
                if box.length == 0
                    break
                if not $(box).hasClass('disabled')
                    $(box).checkbox('check')
